---
id: exam-intro
slug: /exam
sidebar_position: 1
---

# Экзамен

:::danger
Информация данного раздела будет обновлена в мае 2024 г.
:::

## Билет

### Основные вопросы

Билет состоит из двух вопросов, которые рассматриваются в рамках лекционных занятий модулей 1 и 2.

### Задача

Задача на программирование по теме пройденного курса. Решение данной задачи необходимо представить на листе бумаги. Данная задача предназначена для определения уровня понимания объектно-ориентированного программирования на C++.

### Дополнительные вопросы

#### Иллюстрирующие примеры

При ответе на некоторые вопросы необходимо быть готовым написать код на языке C++, подкрепляющий ответ на вопрос. Обратите внимание, что не для всех вопросов это может быть уместно.

**Цель примеров**: проиллюстрировать механизмы и концепции,которые рассматриваются при ответе на вопрос билета, с помощью языка С++.

Примеры при необходимости можно записать на экзаменационном листе при подготовке ответа на вопрос. Также пример может быть запрошен в качестве дополнительного вопроса экзаменатором.

В случае затруднения продемонстрировать код программы, допустимо изображение механизмов и концепций с помощью общепринятых схем (графических моделей): блок-схемы, диаграммы, UML-диаграммамы и т.д.

В основе **оценки примера** в приоритете учитывается ход рассуждения экзаменуемого.

### Вопросы

1. Этапы создания программы на C++. Роли препроцессора, компилятора и компоновщика при подготовке исполняемого файла.
2. Процедурная и объектная декомпозиция.
3. Библиотека и ее состав. Статические и динамические библиотеки.
4. Понятие парадигмы программирования. Классификации парадигм. Место парадигмы в разработке.
5. Императивная парадигма и ее виды.
6. Декларативная парадигма и ее виды.
7. Выполнение императивных и декларативных программ.
8. Сцепление и связанность проектов. Типы кода с точки зрения связанности и сцепления.
9. Пространство имен. Глобальное, вложенное и встроенное пространство имен.
10. Объектно-ориентированное проектирование и программирование. Принципы объектно-ориентированного программирования.
11. Абстрагирование, инкапсуляция, модульность и иерархия с точки зрения объектно-ориентированного программирования.
12. Объект, прототип и класс.
13. Скалярные и составные типы C++.
14. Переменная и объект. Классы и структуры.
15. Спецификация класса. Понятие интерфейса.
16. Управление доступом и ограничения для структур, классов и объединений.
17. Специальные члены класса: конструкторы, деструкторы и указатель this.
18. Инкапсуляция. Правила доступа к элементам класса.
19. Присваивание и инициализация. Инициализация в конструкторе. Списки инициализаторов.
20. Понятие дружественности. Дружественные классы и функции.
21. Перегрузка функций и способы её осуществления. Перегрузка методом класса унарных и бинарных операций.
22. Перегрузка внешней функцией унарных и бинарных операций. Перегрузка потоков ввода/вывода.
23. Перегрузка операций присваивания и преобразования типа. Перегрузка new и delete.
24. Ассоциация, композиция и агрегация.
25. Понятие наследования. Виды и дерево наследования. Стратегии наследования.
26. Ключи наследования и правило доступа к членам производного класса.
27. Правила наследования для перегрузок операций и специальных членов и методов класса.
28. Виртуальные функции и таблица виртуальных функций.
29. Абстрактные классы и интерфейсы. Виртуальные конструкторы и деструкторы.
30. Понятие шаблона функции и шаблонной функции. Выведение типов шаблонных аргументов. Специализация шаблона функции. Примеры шаблонов функций.
31. Понятие шаблона классов и шаблонного класса. Параметры шаблонов классов. Специализация шаблона класса. Примеры шаблонов классов.
32. Частичная специализация шаблона функций и класса.
33. Множественное наследование: виртуальные базовые классы при множественном наследовании.
34. Множественное наследование: разрешение неоднозначности имен и механизм доминирования.
35. Понятие полиморфизма. Раннее и позднее связывание.
36. Параметрический полиморфизм. Полиморфизм через наследование. Виртуальные функции.
37. Традиционные механизмы обработки ошибок. Механизм исключений.
38. Приведение типов и разновидности выражений для приведения типов.
39. Паттерны проектирования. Связь архитектуры приложения и паттернов проектирования. Виды паттернов проектирования.
40. Особенности и методы тестирования объектно-ориентированных программных систем.
